import axios from 'axios';
import qs from 'qs';
import { Toast } from 'vant';
import router from '../../router'
import { getCookie } from './cookieOpt.js';

// post 和post2的请求Content-Type不同，使用时看清是哪种编码格式
function post(url, params) {
    let tokenError = [5001, 5002, 5003, 5004];
    
    return new Promise((resolve, reject) => {
        axios.post(url,
            JSON.stringify({
                ...params
            }),
            {
                headers: {
                    'accessToken': getCookie('token'),
                    'Content-Type': 'application/json'
                }
            }
        ).then(res => {
            if (res.status === 200 && res.data.code === 200) {
                resolve(res.data);
            } else if(tokenError.includes(res.data.code)) {
                Toast(res.data.code + '：' + res.data.msg);
                router.replace({ name: 'login' });
            } else {
                reject(res.data);
                Toast(res.data.msg || '请求出错');
            }
        }).catch(err => {
            Toast( '请求失败');
        });
    });
}

function post2(url, params) {
    let tokenError = [5001, 5002, 5003, 5004];
    
    return new Promise((resolve, reject) => {
        axios.post(url,
            qs.stringify({
                ...params
            }),
            {
                headers: {
                    'accessToken': getCookie('token'),
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            }
        ).then(res => {
            if (res.status === 200 && res.data.code === 200) {
                resolve(res.data);
            } else if(tokenError.includes(res.data.code)) {
                Toast(res.data.code + '：' + res.data.msg);
                router.replace({ name: 'login' });
            } else {
                reject(res.data);
                Toast(res.data.msg || '请求出错');
            }
        }).catch(err => {
            Toast( '请求失败');
        });
    });
}

// 此上传图片的方法有一定局限性，后期可根据需要做调整
function postImg(url, params, headers) {
    let tokenError = [5001, 5002, 5003, 5004];
    
    return new Promise((resolve, reject) => {
        axios.post(url,params,{
                headers: {
                    'Content-Type': 'multipart/form-data;'
                }
            }
        ).then(res => {
            // console.log(res);
            if (res.status === 200 && res.data.code === 0) {
                resolve(res.data);
            } else if(tokenError.includes(res.data.code)) {
                Toast(res.data.code + '：' + res.data.msg);
                router.replace({ name: 'login' });
            } else {
                reject(res.data);
                Toast(res.data.msg || '请求出错');
            }
        }).catch(err => {
            Toast( '请求失败');
        });
    });
}

export default {
    post,
    post2,
    postImg
}
